home *** CD-ROM | disk | FTP | other *** search
/ Games of Daze / Infomagic - Games of Daze (Summer 1995) (Disc 1 of 2).iso / x2ftp / msdos / libs / knowhow4 / khoopic.cpp < prev    next >
C/C++ Source or Header  |  1994-11-04  |  5KB  |  173 lines

  1. #include "khoopic.h"
  2. #include <conio.h>
  3. void KH_OOPic::terminate()
  4.     {
  5.     if(kbhit())
  6.     {
  7.     getch();
  8.     if(kbhit())
  9.         getch();
  10.     serror(23);
  11.     }
  12.     }
  13. ///////////////////
  14. void KH_OOPic::show()
  15.     {
  16.     Window::show();       // Show window
  17.     ::setfillstyle(SOLID_FILL, WHITE);
  18.     ::bar(user_screen());
  19.     if(program != NULL)     // If program is loaded
  20.         {
  21.         rect r = user_screen();     // Set clip area
  22.         setviewport(r.origin.X, r.origin.Y, r.corner.X, r.corner.Y, 1);
  23.     basic(program);                                // Run program
  24.         setviewport(0, 0, getmaxx(), getmaxy(), 1);  // Restore clip area
  25.         }
  26.     }
  27. ///////////////////
  28. void KH_OOPic::get_event()
  29.     {
  30.     char* s1 = "X:      ";
  31.     char* s2 = "Y:      ";
  32.     while(1)
  33.         {
  34.     ::get_event(2);
  35.         if(e.what == MOUSEEVENT)
  36.             {
  37.             loc wh = e.where() - user_screen().origin;
  38.         itoa((long)(wh.X) * 100 / zoom.X + lt.X, s1 + 2, 10);
  39.         itoa((long)(wh.Y) * 100 / zoom.Y + lt.Y, s2 + 2, 10);
  40.             struct textsettingstype textinfo;
  41.             gettextsettings(&textinfo);
  42.             int c = getcolor();
  43.             struct fillsettingstype fillinfo;
  44.             getfillsettings (&fillinfo);
  45.             ::setfillstyle(SOLID_FILL, BLUE);
  46.             ::settextjustify(LEFT_TEXT, TOP_TEXT);
  47.  
  48.             ::bar(560, 2, 640, 32);
  49.             ::setcolor(WHITE);
  50.  
  51.             ::settextstyle(0, 0, 1);
  52.             ::outtextxy(562, 2, s1);
  53.             ::outtextxy(562, 14, s2);
  54.             ::settextstyle(textinfo.font, textinfo.direction, textinfo.charsize);
  55.         ::settextjustify(textinfo.horiz, textinfo.vert);
  56.             ::setfillstyle(fillinfo.pattern, fillinfo.color);
  57.             ::setcolor(c);
  58.         }
  59.         if(e.what == KEYEVENT || (e.what == MOUSEEVENT && e.mouse1()))
  60.             break;
  61.         }
  62.     }
  63. ///////////////////
  64. void KH_OOPic::exe(int act)
  65.     {
  66.     e.what = act ? KEYEVENT : NOEVENT;    // act or user input
  67.  
  68.     switch(act)
  69.     {
  70.     case AC_LEFT:   e.key = EVENT_LEFT; break;
  71.     case AC_RIGHT:  e.key = EVENT_RIGHT; break;
  72.     case AC_UP:     e.key = EVENT_UP; break;
  73.     case AC_DOWN:   e.key = EVENT_DN; break;
  74.     case AC_PG_UP:  e.key = EVENT_PG_UP; break;
  75.     case AC_PG_DN:  e.key = EVENT_PG_DN; break;
  76.     case AC_CTRL_PG_UP: e.key = EVENT_CTRL_PG_UP; break;
  77.         case AC_SET: e.key = EVENT_F9; break;
  78.     case AC_CANCEL: e.key = (isRet(RET_REMOVE))
  79.         ? EVENT_ALT_F3 : EVENT_ESC;
  80.         break;
  81.     case AC_OK:     e.key = EVENT_F2; break;
  82.     }
  83.     mouseHideCursor();
  84.     if(!act)
  85.     hilite();
  86.  
  87.     int on = 0;
  88.     mouseShowCursor();
  89.     rect r = user_screen();
  90.     while(1)
  91.     {
  92.     mouseShowCursor();
  93.     if(!act && !(e.what == MOUSEEVENT && !on)) // Get user-produced event
  94.         get_event();                           // or process "act" message
  95.     else
  96.         on = 1;
  97.     mouseHideCursor();
  98.  
  99.     if(e.what == KEYEVENT)
  100.             {
  101.         switch(e.key)
  102.         {
  103.         case EVENT_F1: global_i[0] = action_type; return;
  104.         case EVENT_RIGHT: lt.X += 8; break;
  105.         case EVENT_LEFT: lt.X = lt.X < 8 ? 0 : lt.X - 8;  break;
  106.         case EVENT_UP: lt.Y = lt.Y < 8 ? 0 : lt.Y - 8; break;
  107.         case EVENT_DN: lt.Y += 8; break;
  108.         case EVENT_HOME:  lt.X = 0; break;
  109.         case EVENT_PG_UP:
  110.             lt.Y = lt.Y < r.height() ? 0 : r.height(); break;
  111.         case EVENT_END:   lt.X += r.width(); break;
  112.         case EVENT_PG_DN: lt.Y += r.height(); break;
  113.         case EVENT_CTRL_PG_UP: lt.Y = 0; break;
  114.                 case EVENT_F9: break;  // run
  115.         case EVENT_ESC: global_num = 0;
  116.             global_i[0] = AC_NULL; return;
  117.         case EVENT_F6:
  118.         case EVENT_F10:
  119.         case EVENT_TAB:
  120.         case EVENT_ALT_F3:
  121.         case EVENT_ALT_F4:
  122.         case EVENT_ALT_TAB:
  123.             unhilite(); global_num = 1;
  124.             global_i[0] = 0; return;
  125.         case EVENT_F2:
  126.         case EVENT_RETURN :  unhilite(); global_num = 1;
  127.             global_i[0] = action_type; return;
  128.         }
  129.             if(program != NULL)     // If program is loaded
  130.                 {
  131.                 ::setfillstyle(SOLID_FILL, WHITE);
  132.                 ::bar(user_screen());
  133.                 setviewport(r.origin.X, r.origin.Y, r.corner.X, r.corner.Y, 1);
  134.                 basic(program);                              // Run program
  135.                 setviewport(0, 0, getmaxx(), getmaxy(), 1);  // Restore clip area
  136.                 }
  137.             }
  138.     else
  139.         {
  140.         if(!mouse_in(e.where()))    // Mouse pressed outside
  141.         {
  142.         unhilite();
  143.         global_num = 0; global_i[0] = AC_NULL;
  144.         return;
  145.         }
  146.         }
  147.     if(act)    // leave object and return to the object which calls it
  148.         {      // after single processing of "act" command
  149.         global_num = 1;
  150.         return;
  151.         }
  152.     }
  153.     }
  154. //////////////
  155. /*
  156. void main()
  157.     {
  158.     if(!init_KNOW_HOW())
  159.         return;
  160.     setfillstyle(SOLID_FILL, pColorSet->colors.BAK_COLOR);
  161.     bar(0, 0, getmaxx(), getmaxy());
  162.  
  163.     KH_OOPic s(rect(10, 0, 60, 24));
  164.  
  165.     s.show();
  166.     s.set_program(s.load_program("work.bas"));
  167.     s.show();
  168.     s.exe();
  169.  
  170.     close_KNOW_HOW();
  171.     closegraph();
  172.     }
  173. */